import { http } from '@/utils/http'
import type {
  WeiXinLoginParams,
  LoginParams,
  LoginResult,
  ProfileDetail,
  ProfileParams,
  AvatarResult,
} from '@/types/user'
/**
 * 微信登录
 *@param {WeiXinLoginParams} data 登录参数
 */
export const loginWeiXin = (data: WeiXinLoginParams) => {
  return http<LoginResult>({
    url: '/login/wxMin',
    method: 'POST',
    data,
  })
}

/**
 * 小程序登录-内测版（该接口用于模拟微信小程序一键登录，开发学习使用。）
 * @param {string} phoneNumber 不传加密信息时，模拟的手机号必传
 */
export const loginByPhone = (phoneNumber: string) => {
  return http<LoginResult>({
    url: '/login/wxMin/simple',
    method: 'POST',
    data: {
      phoneNumber,
    },
  })
}

/**
 * 传统登录-用户名+密码
 * @param {LoginParams} data 用户名密码
 */
export const loginByUsername = (data: LoginParams) => {
  return http<LoginResult>({
    url: '/login',
    method: 'POST',
    data,
  })
}

/**获取个人信息*/
export const getUserInfoAPI = () => {
  return http<ProfileDetail>({
    url: '/member/profile',
    method: 'GET',
  })
}

interface Data<T> {
  code: string
  msg: string
  result: T
}

/**
 * 修改用户头像
 * 小程序端通过 wx.uploadFile 上传文件，网页端通过 formData 上传文件。
 * @param { string } filePath 头像文件路径
 */
export const updateAvatar = (filePath: string) => {
  return new Promise<Data<AvatarResult>>((resolve, reject) => {
    uni.uploadFile({
      url: '/member/profile/avatar',
      name: 'file',
      filePath: filePath,
      success: (result) => {
        if (result.statusCode === 200) {
          const res = JSON.parse(result.data)
          resolve(res as Data<AvatarResult>)
        } else {
          const res = JSON.parse(result.data)
          reject(res.msg)
        }
      },
      fail: (err) => {
        reject(err)
      },
    })
  })
}

/** 修改个人信息
 * @param {ProfileParams} data 修改个人信息参数
 */
export const updateProfile = (data: ProfileParams) => {
  return http<ProfileDetail>({
    url: '/member/profile',
    method: 'PUT',
    data,
  })
}
